iT邦幫忙

2024 iThome 鐵人賽

DAY 3
0
佛心分享-刷題不只是刷題

只是單純想刷題XD系列 第 3

只是單純想刷題XD Day3

  • 分享至 

  • xImage
  •  

因為發文的隔天是禮拜天我想要睡覺所以就提前發文了~(純粹就是懶惰)
今天要來講解的題目是我們的第三題

題目

https://ithelp.ithome.com.tw/upload/images/20240914/20160320OVN6U19Wrc.jpg

翻譯

簡單來說就是要找出最大不重複的子字串長度

解題思路

  • 1.初始化一個哈希表 m,一個變量 start 記錄當前無重複子串的起始位置,一個變量 maxLength 記錄最長子串的長度。
  • 2.遍歷字符串的每一個字符:
    • 如果當前字符已經在哈希表中,並且出現的位置在 start 之後,更新 start 為該字符上一次出現的位置。
    • 計算當前子串長度 i - start,並更新 maxLength。
    • 將當前字符 s[i] 和其索引存入哈希表。
  • 3.遍歷結束後,返回 maxLength。

code

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        unordered_map<char, int> m;
        int maxLength = 0;  // 更有表意的變量名
        int start = -1;  // 用來追踪無重複子串的起始位置

        for (int i = 0; i < (int)s.size(); i++) {
            // 如果字符s[i]在map中存在且出現的位置在start之後,更新start
            if (m.find(s[i]) != m.end() && m[s[i]] > start) {
                start = m[s[i]];
            }
            // 計算當前無重複子串的長度
            maxLength = max(maxLength, i - start);
            // 更新當前字符的最新位置
            m[s[i]] = i;
        }

        return maxLength;
    }
};


上一篇
只是單純想刷題XD Day2
下一篇
只是單純想刷題XD Day4
系列文
只是單純想刷題XD30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言